Pythonã®ã¬ã³ã¡ã³ããŒã·ã§ã³ã·ã¹ãã ã«ãããå調ãã£ã«ã¿ãªã³ã°ã®åãæ¢æ±ã倿§ãªã°ããŒãã«ãŠãŒã¶ãŒã®å¥œã¿ã«å¯Ÿå¿ããã广çãªã¬ã³ã¡ã³ããŒã·ã§ã³ãšã³ãžã³ãæ§ç¯ããæ¹æ³ãåŠã³ãŸãã
ãŠãŒã¶ãŒã®å¥œã¿ãè§£ãæŸã€ïŒPythonãšå調ãã£ã«ã¿ãªã³ã°ã«ããã¬ã³ã¡ã³ããŒã·ã§ã³ã·ã¹ãã 培åºè§£èª¬
仿¥ã®ããŒã¿è±å¯ãªäžçã§ã¯ãeã³ããŒã¹å€§æããã¹ããªãŒãã³ã°ãã©ãããã©ãŒã ããœãŒã·ã£ã«ã¡ãã£ã¢ãããã¯ãŒã¯ã«è³ããŸã§ãæ§ã ãªåéã®äŒæ¥ããŠãŒã¶ãŒãæ¹ãã€ãã驿°çãªæ¹æ³ãåžžã«æš¡çŽ¢ããŠããŸãããã®ãšã³ã²ãŒãžã¡ã³ãæŠç¥ã®èŠãšãªãã®ã¯ãåã ã®ãŠãŒã¶ãŒã®å¥œã¿ãçè§£ãäºæž¬ããèœåã§ããããã«ã¬ã³ã¡ã³ããŒã·ã§ã³ã·ã¹ãã ãæŽ»èºããŸãããããã®ã·ã¹ãã ãæ§ç¯ããããã®æã匷åã§åºãæ¡çšãããŠããæè¡ã®1ã€ãå調ãã£ã«ã¿ãªã³ã°ã§ãããPythonã¯ãã®å ç¢ãªããŒã¿ãµã€ãšã³ã¹ãšã³ã·ã¹ãã ã«ããããã®å®è£ ã«çæ³çãªç°å¢ãæäŸããŸãã
ãã®å æ¬çãªã¬ã€ãã§ã¯ãPythonã¬ã³ã¡ã³ããŒã·ã§ã³ã·ã¹ãã ã«ãããå調ãã£ã«ã¿ãªã³ã°ã®äžçãæ·±ãæãäžããŸãããã®æ žãšãªãæŠå¿µãç°ãªãã¢ãããŒããå®è·µçãªå®è£ æŠç¥ããããŠã°ããŒãã«ãªãªãŒãã£ãšã³ã¹ã«é¿ã广çãªã·ã¹ãã ãæ§ç¯ããäžã§é¢ãããã¥ã¢ã³ã¹ãæ¢æ±ããŸããããªããé§ãåºãã®ããŒã¿ãµã€ãšã³ãã£ã¹ãã§ããããšãçµéšè±å¯ãªæ©æ¢°åŠç¿ãšã³ãžãã¢ã§ããããšãããŒãœãã©ã€ãºãããäœéšã掻çšããããšããŠããããžãã¹ãªãŒããŒã§ããããšããã®èšäºã¯å調ãã£ã«ã¿ãªã³ã°ã®åãæŽ»çšããããã«å¿ èŠãªç¥èãšæŽå¯ãããªãã«äžããããšãç®æããŸãã
ã¬ã³ã¡ã³ããŒã·ã§ã³ã·ã¹ãã ãšã¯ïŒ
ãã®æ žå¿ã«ãããŠãã¬ã³ã¡ã³ããŒã·ã§ã³ã·ã¹ãã ãšã¯ããŠãŒã¶ãŒãããã¢ã€ãã ã«å¯Ÿãã奜ã¿ãäºæž¬ããããã«èšèšãããã¢ã«ãŽãªãºã ã§ãããããã®ã¢ã€ãã ã¯ã補åãæ ç»ããèšäºã鳿¥œãããã«ã¯äººç©ãŸã§å€å²ã«ããããŸããäž»ãªç®æšã¯ããŠãŒã¶ãŒãè峿·±ããŸãã¯æçšã ãšæããå¯èœæ§ã®ããã¢ã€ãã ãææ¡ããããšã§ãããããã«ãã£ãŠãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãåäžããããšã³ã²ãŒãžã¡ã³ããé«ãã販売ãã³ã³ãã³ãæ¶è²»ãªã©ã®ããžãã¹ç®æšãæšé²ããŸãã
ã¬ã³ã¡ã³ããŒã·ã§ã³ã·ã¹ãã ã®é åã¯åºå€§ã§ãããã€ãã®ç°ãªãã¢ãããŒãããããŸãã
- ã³ã³ãã³ãããŒã¹ãã£ã«ã¿ãªã³ã°: ã¢ã€ãã ã®å±æ§ã«åºã¥ãããŠãŒã¶ãŒãéå»ã«æ°ã«å ¥ã£ããã®ãšé¡äŒŒããã¢ã€ãã ãæšå¥šããŸããäŸãã°ããŠãŒã¶ãŒã匷åãªå¥³æ§äž»äººå ¬ãç»å ŽããSFæ ç»ã楜ããå Žåãã³ã³ãã³ãããŒã¹ã·ã¹ãã ã¯ãããã®ç¹åŸŽãæã€æ ç»ãããã«ææ¡ããŸãã
- å調ãã£ã«ã¿ãªã³ã°: çŸåšã®ãŠãŒã¶ãŒãšé¡äŒŒããä»ã®ãŠãŒã¶ãŒã®è¡åãšå¥œã¿ã«åºã¥ããŠã¢ã€ãã ãæšå¥šããŸãããããæ¬èšäºã®çŠç¹ã§ãã
- ãã€ããªããã·ã¹ãã : è€æ°ã®ã¬ã³ã¡ã³ããŒã·ã§ã³æè¡ïŒäŸïŒã³ã³ãã³ãããŒã¹ãšå調ãã£ã«ã¿ãªã³ã°ïŒãçµã¿åãããããããã®é·æã掻çšããçæãè£å®ããŸãã
å調ãã£ã«ã¿ãªã³ã°ã®å
å調ãã£ã«ã¿ãªã³ã°ã¯ããã®åã®éãã矀è¡ã®ç¥æµããæŽ»çšããŸãããã®ã·ã¹ãã ã¯ããã2人ã®ãŠãŒã¶ãŒãéå»ã«ç¹å®ã®ã¢ã€ãã ã«ã€ããŠåæãããªãã°ãå°æ¥ãåã³åæããå¯èœæ§ãé«ããšããååã«åºã¥ããŠæ©èœããŸããã¢ã€ãã èªäœãçè§£ããå¿ èŠã¯ãªãããŠãŒã¶ãŒãšã¢ã€ãã ã®ã€ã³ã¿ã©ã¯ã·ã§ã³ããŒã¿ã®ã¿ãå¿ èŠã§ããããã«ãããéåžžã«æ±çšæ§ãé«ããå¹ åºããã¡ã€ã³ã«é©çšå¯èœã§ãã
Netflixã®ãããªã°ããŒãã«ã¹ããªãŒãã³ã°ãµãŒãã¹ããAmazonã®ãããªã°ããŒãã«eã³ããŒã¹ãã©ãããã©ãŒã ãæ³åããŠã¿ãŠãã ããããããã¯äœçŸäžãã®ãŠãŒã¶ãŒãšåºç¯ãªã¢ã€ãã ã«ã¿ãã°ãæ±ããŠããŸããä»»æã®ãŠãŒã¶ãŒã«å¯ŸããŠæåã§ã¬ã³ã¡ã³ããŒã·ã§ã³ããã¥ã¬ãŒãããã®ã¯éçŸå®çã§ããå調ãã£ã«ã¿ãªã³ã°ã¯ããŠãŒã¶ãŒãã¢ã€ãã ãšã©ã®ããã«ã€ã³ã¿ã©ã¯ã·ã§ã³ãããããã¿ãŒã³ãšããŠç¹å®ããããšã§ããã®ããã»ã¹ãèªååããŸãã
å調ãã£ã«ã¿ãªã³ã°ã®äž»èŠãªåå
å調ãã£ã«ã¿ãªã³ã°ã®åºæ¬çãªèãæ¹ã¯ãäž»ã«2ã€ã®ã«ããŽãªãŒã«åããããŸãã
- ãŠãŒã¶ãŒããŒã¹å調ãã£ã«ã¿ãªã³ã°: ãã®ã¢ãããŒãã¯ãã¿ãŒã²ãããŠãŒã¶ãŒã«é¡äŒŒãããŠãŒã¶ãŒãèŠã€ããããšã«çŠç¹ãåœãŠãŸããå¿ãåãããããŠãŒã¶ãŒã®ã°ã«ãŒããç¹å®ããããšããããã®é¡äŒŒãŠãŒã¶ãŒãæ°ã«å ¥ã£ãïŒãã ãã¿ãŒã²ãããŠãŒã¶ãŒããŸã ã€ã³ã¿ã©ã¯ã·ã§ã³ããŠããªãïŒã¢ã€ãã ãæšå¥šãããŸãããã®ããã»ã¹ã«ã¯éåžžã以äžãå«ãŸããŸãã
- éå»ã®ã€ã³ã¿ã©ã¯ã·ã§ã³ïŒäŸïŒè©äŸ¡ãè³Œå ¥ãé²èЧïŒã«åºã¥ããŠãŠãŒã¶ãŒéã®é¡äŒŒæ§ãèšç®ããã
- æãé¡äŒŒãããkã人ã®ãŠãŒã¶ãŒïŒk-è¿åæ³ïŒãç¹å®ããã
- ãããã®k-è¿åã®ãŠãŒã¶ãŒã®å¥œã¿ãéçŽããã¿ãŒã²ãããŠãŒã¶ãŒãžã®ã¬ã³ã¡ã³ããŒã·ã§ã³ãçæããã
- ã¢ã€ãã ããŒã¹å調ãã£ã«ã¿ãªã³ã°: é¡äŒŒãŠãŒã¶ãŒãèŠã€ãã代ããã«ããã®ã¢ãããŒãã¯ãŠãŒã¶ãŒããã§ã«æ°ã«å ¥ã£ãã¢ã€ãã ã«é¡äŒŒããã¢ã€ãã ãèŠã€ããããšã«çŠç¹ãåœãŠãŸãããããŠãŒã¶ãŒãã¢ã€ãã Aãæ°ã«å ¥ã£ãŠãããã¢ã€ãã Aãæ°ã«å ¥ã£ããŠãŒã¶ãŒãã¢ã€ãã Bãé »ç¹ã«æ°ã«å ¥ã£ãŠããå Žåãã¢ã€ãã Bã¯ã¬ã³ã¡ã³ããŒã·ã§ã³ã®åŒ·åãªåè£ãšãªããŸãããã®ããã»ã¹ã«ã¯ä»¥äžãå«ãŸããŸãã
- ãŠãŒã¶ãŒãã¢ã€ãã ãšã©ã®ããã«ã€ã³ã¿ã©ã¯ã·ã§ã³ãããã«åºã¥ããŠã¢ã€ãã éã®é¡äŒŒæ§ãèšç®ããã
- ã¿ãŒã²ãããŠãŒã¶ãŒã«ã€ããŠãæ°ã«å ¥ã£ãã¢ã€ãã ãç¹å®ããã
- ãŠãŒã¶ãŒãæ°ã«å ¥ã£ãã¢ã€ãã ã«æãé¡äŒŒããã¢ã€ãã ãæšå¥šããã
ã¢ã€ãã ããŒã¹å調ãã£ã«ã¿ãªã³ã°ã¯ãã¢ã€ãã ã®æ°ããŠãŒã¶ãŒã®æ°ãããäžè¬çã«å®å®ããŠãããã¢ã€ãã éã®é¡äŒŒåºŠè¡åã®ç¶æãšèšç®ã容æã§ãããããå€§èŠæš¡ã·ã¹ãã ã§ãã°ãã°å¥œãŸããŸãã
å調ãã£ã«ã¿ãªã³ã°ã®ããã®ããŒã¿è¡šçŸ
ããããã¬ã³ã¡ã³ããŒã·ã§ã³ã·ã¹ãã ã®åºç€ã¯ããããåäœããããŒã¿ã§ããå調ãã£ã«ã¿ãªã³ã°ã®å Žåããã®ããŒã¿ã¯éåžžããŠãŒã¶ãŒ-ã¢ã€ãã ã€ã³ã¿ã©ã¯ã·ã§ã³è¡åã®åœ¢åŒã§æäŸãããŸãããã®è¡åã¯ããŠãŒã¶ãŒãšã¢ã€ãã éã®ã€ã³ã¿ã©ã¯ã·ã§ã³ã衚ããŸãã
åçŽåãããäŸãèããŠã¿ãŸãããã
| ãŠãŒã¶ãŒ/ã¢ã€ãã | æ ç»A | æ ç»B | æ ç»C | æ ç»D |
|---|---|---|---|---|
| ãŠãŒã¶ãŒ1 | 5 | ? | 4 | 1 |
| ãŠãŒã¶ãŒ2 | 4 | 5 | ? | 2 |
| ãŠãŒã¶ãŒ3 | ? | 4 | 5 | 3 |
| ãŠãŒã¶ãŒ4 | 1 | 2 | 3 | ? |
ãã®è¡åã§ã¯ïŒ
- è¡ã¯ãŠãŒã¶ãŒã衚ããŸãã
- åã¯ã¢ã€ãã ïŒãã®å Žåã¯æ ç»ïŒã衚ããŸãã
- ã»ã«ã®å€ã¯ã€ã³ã¿ã©ã¯ã·ã§ã³ã衚ããŸããããã¯è©äŸ¡ïŒäŸïŒ1ïœ5ã€æïŒãè³Œå ¥ãŸãã¯é²èЧã瀺ããã€ããªå€ïŒã€ã³ã¿ã©ã¯ã·ã§ã³ããã®å Žåã¯1ããªãã®å Žåã¯0ãŸãã¯nullïŒããŸãã¯ã€ã³ã¿ã©ã¯ã·ã§ã³ã®æ°ã§ããå ŽåããããŸãã
- ã?ãã¯ããŠãŒã¶ãŒããã®ã¢ã€ãã ãšã€ã³ã¿ã©ã¯ã·ã§ã³ããŠããªãããšã瀺ããŸãã
ã°ããŒãã«ãªãªãŒãã£ãšã³ã¹ã«ãšã£ãŠããã®ããŒã¿ãã©ã®ããã«åéãã衚çŸãããããèæ ®ããããšãéèŠã§ããç°ãªãæåã§ã¯ãã¢ã€ãã ã®è©äŸ¡ãã€ã³ã¿ã©ã¯ã·ã§ã³ã«é¢ããèŠç¯ãç°ãªãå ŽåããããŸããäŸãã°ãã3ããšããè©äŸ¡ã¯ã°ããŒãã«ã«ã¯å¹³åçãªäœéšãæå³ãããããããŸããããç¹å®ã®å°åã§ã¯æåçèæ¯ã«ãã£ãŠåŠå®çãŸãã¯è¯å®çãªæå³åããæã€ããšããããŸããã·ã¹ãã ã¯ããã®ãããªå€åã«å¯Ÿå¿ã§ããã»ã©å ç¢ã§ããå¿ èŠããããããããæ£èŠåæè¡ã䜿çšããããæåçæåºŠãäœãå¯èœæ§ã®ããæé»çãªãã£ãŒãããã¯ïŒã¯ãªãã¯çãããŒãžæ»åšæéãªã©ïŒãèæ ®ãããããã§ãããã
Pythonã§ã®å調ãã£ã«ã¿ãªã³ã°ã®å®è£
Pythonã®è±å¯ãªã©ã€ãã©ãªã«ãããå調ãã£ã«ã¿ãªã³ã°ã¢ã«ãŽãªãºã ã®å®è£ ã¯æ¯èŒçç°¡åã§ããããã§ã¯ãæãäžè¬çãªã©ã€ãã©ãªãšãã¯ããã¯ãããã€ã玹ä»ããŸãã
1. ããŒã¿æäœã®ããã®NumPyãšPandas
ã¬ã³ã¡ã³ããŒã·ã§ã³ã¢ã«ãŽãªãºã ã«æ·±ãå ¥ãåã«ãããŒã¿ãããŒããã¯ãªãŒãã³ã°ãæäœããå¿ èŠããããŸããNumPyãšPandasã¯ããã®ããã®äžå¯æ¬ ãªããŒã«ã§ãã
- Pandas DataFrameã¯ããŠãŒã¶ãŒ-ã¢ã€ãã ã€ã³ã¿ã©ã¯ã·ã§ã³è¡åã®è¡šçŸã«æé©ã§ãã
- æ§ã ãªãœãŒã¹ïŒCSVãããŒã¿ããŒã¹ãAPIïŒããããŒã¿ãDataFrameã«ç°¡åã«ããŒãã§ããŸãã
- ãããã®ã©ã€ãã©ãªã¯ãæ¬ æå€ã®åŠçãããŒã¿ã®å€æãè€éãªéèšãå®è¡ããããã®åŒ·åãªæ©èœãæäŸããŸãã
2. é¡äŒŒåºŠèšç®ã®ããã®SciPy
NumPyã®äžã«æ§ç¯ãããSciPyã¯ãå調ãã£ã«ã¿ãªã³ã°ã®åºæ¬ãšãªãçè¡åããã³å¹ççãªè·é¢/é¡äŒŒåºŠèšç®ã®ããã®ã¢ãžã¥ãŒã«ãæäŸããŸãã
scipy.spatial.distance.cdistãŸãã¯scipy.spatial.distance.pdistã¯ã芳枬å€ïŒãŠãŒã¶ãŒãŸãã¯ã¢ã€ãã ïŒéã®ãã¢ã¯ã€ãºè·é¢ãèšç®ã§ããŸãã- äžè¬çãªé¡äŒŒåºŠææšã«ã¯ãã³ãµã€ã³é¡äŒŒåºŠãšãã¢ãœã³çžé¢ä¿æ°ããããŸãã
- ã³ãµã€ã³é¡äŒŒåºŠã¯ã2ã€ã®ãã¯ãã«ã®éã®è§åºŠã®ã³ãµã€ã³ã枬å®ããŸããçããŒã¿ãããŸãåŠçã§ãããããåºã䜿çšãããŠããŸãã
- ãã¢ãœã³çžé¢ä¿æ°ã¯ã2ã€ã®å€æ°éã®ç·åœ¢çžé¢ã枬å®ããŸããè©äŸ¡ã¹ã±ãŒã«ã®éãã«ææã§ãæç€ºçãªè©äŸ¡ãå©çšå¯èœãªå Žåã«ãã䜿çšãããŸãã
3. æ©æ¢°åŠç¿ã¢ã«ãŽãªãºã ã®ããã®Scikit-learn
Scikit-learnã«ã¯å°çšã®å調ãã£ã«ã¿ãªã³ã°ã¢ãžã¥ãŒã«ã¯ãããŸããããã³ã³ããŒãã³ãã®å®è£ ããè¡ååè§£ã®ãããªããé«åºŠãªæè¡ã«ãšã£ãŠã¯éåžžã«äŸ¡å€ã®ãããã®ã§ãã
- è¿åæ³ã¢ã«ãŽãªãºã ïŒäŸïŒ
KNeighborsClassifier,NearestNeighborsïŒã¯ãé¡äŒŒãããŠãŒã¶ãŒãŸãã¯ã¢ã€ãã ãèŠã€ããããã«é©å¿ã§ããŸãã - ç¹ç°å€åè§£ïŒSVDïŒãéè² å€è¡åå ååè§£ïŒNMFïŒãªã©ã®è¡ååè§£æè¡ã¯ã次å åæžã®ããã®åŒ·åãªææ³ã§ãããã¬ã³ã¡ã³ããŒã·ã§ã³ã®ããã®æœåšå åã¢ãã«ãæ§ç¯ããããã«äœ¿çšã§ããŸããScikit-learnã¯NMFã®å®è£ ãæäŸããŠããŸãã
4. Surprise: ã¬ã³ã¡ã³ããŒã·ã¹ãã ã®ããã®Python Scikit
ã¬ã³ã¡ã³ããŒã·ã¹ãã ãæ§ç¯ããã³åæããããã®å°çšã®ãŠãŒã¶ãŒãã¬ã³ããªãŒãªã©ã€ãã©ãªãšããŠã¯ãSurpriseãåªããéžæè¢ã§ããããã¯ä»¥äžãæäŸããŸãã
- æ§ã ãªå調ãã£ã«ã¿ãªã³ã°ã¢ã«ãŽãªãºã ïŒäŸïŒKNNBasicãSVDãNMFãKNNWithMeansïŒã®å®è£ ã
- ã¬ã³ã¡ã³ããŒã·ã§ã³ã¢ãã«ãè©äŸ¡ããããã®ããŒã«ïŒäŸïŒRMSEãMAEãé©åçãåçŸçïŒã
- ãã€ããŒãã©ã¡ãŒã¿ã調æŽããããã®äº€å·®æ€èšŒæ©èœã
ã¢ã€ãã ããŒã¹å調ãã£ã«ã¿ãªã³ã°ã«Surpriseã䜿çšããç°¡ç¥åãããäŸãèŠãŠãããŸãããã
from surprise import Dataset, Reader
from surprise import KNNBasic
from surprise.model_selection import train_test_split
from surprise import accuracy
# 1. Load your data
# Assuming your data is in a pandas DataFrame with columns: user_id, item_id, rating
# For example:
# data = {'user_id': [1, 1, 1, 2, 2, 3, 3, 4, 4],
# 'item_id': ['Movie A', 'Movie C', 'Movie D', 'Movie A', 'Movie B', 'Movie B', 'Movie C', 'Movie A', 'Movie D'],
# 'rating': [5, 4, 1, 4, 5, 4, 5, 1, 2]}
# df = pd.DataFrame(data)
# Define a Reader object to specify the rating scale
reader = Reader(rating_scale=(1, 5))
# Load data from a pandas DataFrame (replace with your actual data loading)
data = Dataset.load_from_df(df[['user_id', 'item_id', 'rating']], reader)
# 2. Split data into training and testing sets
trainset, testset = train_test_split(data, test_size=.25)
# 3. Choose your algorithm (Item-based Nearest Neighbors)
# 'sim_options' specifies how to compute similarity.
# 'user_based=False' indicates item-based.
sim_options = {
'name': 'cosine',
'user_based': False # Compute item similarity
}
algo = KNNBasic(sim_options=sim_options)
# 4. Train the algorithm on the trainset
algo.fit(trainset)
# 5. Make predictions on the testset
predictions = algo.test(testset)
# 6. Evaluate the performance
accuracy.rmse(predictions)
accuracy.mae(predictions)
# 7. Make a prediction for a specific user and item
# Suppose you want to predict user 1's rating for 'Movie B'
user_id_to_predict = 1
item_id_to_predict = 'Movie B'
# Get the inner ID for the item (Surprise uses inner IDs)
item_inner_id = algo.trainset.to_inner_iid(item_id_to_predict)
# Get the inner ID for the user
user_inner_id = algo.trainset.to_inner_uid(user_id_to_predict)
# Predict the rating
predicted_rating = algo.predict(user_id_to_predict, item_id_to_predict).est
print(f\"Predicted rating for user {user_id_to_predict} on item {item_id_to_predict}: {predicted_rating}\")
# 8. Get top-N recommendations for a user
from collections import defaultdict
def get_top_n(predictions, n=10):
\"\"\"Return the top-N recommendation for each user from a set of predictions.\"\"\"
# First map the predictions to each user.
top_n = defaultdict(list)
for uid, iid, true_r, est, _ in predictions:
top_n[uid].append((iid, est))
# Then sort the predictions for each user and retrieve the k highest ones.
for uid, user_ratings in top_n.items():
user_ratings.sort(key=lambda x: x[1], reverse=True)
top_n[uid] = user_ratings[:n]
return top_n
# To get recommendations, you need to predict for all items a user hasn't interacted with.
# This is a simplified example; in practice, you'd iterate through all items.
# For demonstration, let's assume we have a list of all items and all users.
# Let's create a dummy list of all users and items for illustration
all_users = trainset.all_users()
all_items = trainset.all_items()
# To generate recommendations, we need to iterate through each user and predict ratings for items they haven't seen.
# This can be computationally intensive.
# For a practical example, let's find recommendations for a specific user (e.g., User 1)
user_id_for_recommendation = 1
# Get all items in the dataset
all_movie_ids = df['item_id'].unique()
# Get items the user has already interacted with
items_interacted_by_user = df[df['user_id'] == user_id_for_recommendation]['item_id'].tolist()
# Identify items the user hasn't interacted with
items_to_recommend_for = [item for item in all_movie_ids if item not in items_interacted_by_user]
# Predict ratings for these items
user_predictions = []
for item_id in items_to_recommend_for:
user_predictions.append(algo.predict(user_id_for_recommendation, item_id))
# Get top N recommendations
recommendations = get_top_n(user_predictions, n=5)
print(f\"\nTop 5 recommendations for user {user_id_for_recommendation}:\n\")
for item_id, estimated_rating in recommendations[user_id_for_recommendation]:
print(f\"- {item_id} (Estimated Rating: {estimated_rating:.2f})\")
4. è¡ååè§£æè¡
è¡ååè§£æè¡ã¯ãå€§èŠæš¡ã§çãªãŠãŒã¶ãŒ-ã¢ã€ãã è¡åãããŠãŒã¶ãŒå åè¡åãšã¢ã€ãã å åè¡åãšãã2ã€ã®ããå°ããå¯ãªè¡åã«åè§£ãã匷åãªææ³ã§ãããããã®å åã¯ããŠãŒã¶ãŒã®å¥œã¿ãšã¢ã€ãã ã®ç¹æ§ã説æããæœåšçãªç¹åŸŽã衚ããŸãã
- ç¹ç°å€åè§£ïŒSVDïŒ: ã¬ã³ã¡ã³ããŒã·ã§ã³ã·ã¹ãã ã«å¿çšã§ããåºæ¬çãªæè¡ã§ããè¡åã3ã€ã®å¥ã®è¡åã«åè§£ããŸããã¬ã³ã¡ã³ããŒã·ã§ã³ã·ã¹ãã ã§ã¯ãæœåšå åãèŠã€ããããã«ããŠãŒã¶ãŒ-ã¢ã€ãã è¡åïŒãŸãã¯ãã®å€åœ¢ïŒã«å¯ŸããŠãã䜿çšãããŸãã
- éè² å€è¡åå ååè§£ïŒNMFïŒ: SVDã«äŒŒãŠããŸãããå åè¡åãéè² ã§ãããšããå¶çŽãèšããŸããããã«ãããããè§£éããããæœåšå åãåŸãããããšããããŸãã
- Funk SVDïŒãŸãã¯æ£ååSVDïŒ: ã¬ã³ã¡ã³ããŒã·ã§ã³ã·ã¹ãã ã®ããã«ç¹å¥ã«èª¿æŽãããSVDã®äººæ°ã®ããããªã¢ã³ãã§ãã芳枬ãããè©äŸ¡ã®ã¿ã®èª€å·®ãæå°éã«æããããšã«çŠç¹ãåœãŠãéåŠç¿ãé²ãããã«ããã»ã¹ãæ£ååããŸããSurpriseã©ã€ãã©ãªããããå®è£ ããŠããŸãã
è¡ååè§£æ³ã¯ãç¹ã«ã°ããŒãã«ãã©ãããã©ãŒã ã«å žåçãªéåžžã«å€§èŠæš¡ãªããŒã¿ã»ããã«ãããŠãåŸæ¥ã®è¿åæ³ãããã¹ã±ãŒã©ãã«ã§ãããããè€éãªãŠãŒã¶ãŒ-ã¢ã€ãã ã€ã³ã¿ã©ã¯ã·ã§ã³ãæããããšãã§ããŸãã
ã°ããŒãã«ãªãŒãã£ãšã³ã¹ã®ããã®èª²é¡ãšèæ ®äºé
倿§ãªã°ããŒãã«ãªãŒãã£ãšã³ã¹ã«å¹æçã«æ©èœããã¬ã³ã¡ã³ããŒã·ã§ã³ã·ã¹ãã ãæ§ç¯ããããšã¯ãç¬èªã®èª²é¡ãæç€ºããŸãã
1. ã³ãŒã«ãã¹ã¿ãŒãåé¡
ã³ãŒã«ãã¹ã¿ãŒãåé¡ã¯ãæ°ãããŠãŒã¶ãŒãæ°ããã¢ã€ãã ãã·ã¹ãã ã«å°å ¥ããããšãã«çºçããŸããå調ãã£ã«ã¿ãªã³ã°ã¯éå»ã®ã€ã³ã¿ã©ã¯ã·ã§ã³ããŒã¿ã«äŸåããããã以äžã®ã¬ã³ã¡ã³ããŒã·ã§ã³ãè¡ãã®ã«èŠåŽããŸãã
- æ°èŠãŠãŒã¶ãŒ: ã€ã³ã¿ã©ã¯ã·ã§ã³å±¥æŽããªããããã·ã¹ãã ã¯ãã®å¥œã¿ãææ¡ã§ããŸããã
- æ°èŠã¢ã€ãã : 誰ãã€ã³ã¿ã©ã¯ã·ã§ã³ããŠããªããããé¡äŒŒæ§ã«åºã¥ããŠæšå¥šããããšã¯ã§ããŸããã
解決ç:
- ã³ã³ãã³ãããŒã¹ãã£ã«ã¿ãªã³ã°: æ°èŠã¢ã€ãã ã«ã¯ã¢ã€ãã ã®ã¡ã¿ããŒã¿ããæ°èŠãŠãŒã¶ãŒã«ã¯ãŠãŒã¶ãŒã®ãã¢ã°ã©ãã£ãã¯æ å ±ãæåã®ãªã³ããŒãã£ã³ã°è³ªåã䜿çšããŸãã
- ãã€ããªããã¢ãããŒã: å調ãã£ã«ã¿ãªã³ã°ãšã³ã³ãã³ãããŒã¹ã®ææ³ãçµã¿åãããŸãã
- 人æ°åºŠããŒã¹ã®ã¬ã³ã¡ã³ããŒã·ã§ã³: æ°èŠãŠãŒã¶ãŒã«ã¯ãã°ããŒãã«ã§ããŸãã¯æšå®ãããå°åå ã§æã人æ°ã®ããã¢ã€ãã ãæšå¥šããŸãã
2. ããŒã¿ã¹ããŒã¹ãã¹
ãŠãŒã¶ãŒ-ã¢ã€ãã ã€ã³ã¿ã©ã¯ã·ã§ã³è¡åã¯ãã°ãã°æ¥µããŠçã§ãããã»ãšãã©ã®ãŠãŒã¶ãŒãå©çšå¯èœãªã¢ã€ãã ã®ããäžéšããã€ã³ã¿ã©ã¯ã·ã§ã³ããŠããªãããšãæå³ããŸãããã®ã¹ããŒã¹ãã¹ã¯ãé¡äŒŒãããŠãŒã¶ãŒãã¢ã€ãã ãèŠã€ããããšãå°é£ã«ããã¬ã³ã¡ã³ããŒã·ã§ã³ã®ç²ŸåºŠäœäžã«ã€ãªããå¯èœæ§ããããŸãã
解決ç:
- è¡ååè§£: ãããã®æè¡ã¯ãæœåšè¡šçŸãåŠç¿ããããšã§ãã¹ããŒã¹ãã¹ãåŠçããããã«æ¬è³ªçã«èšèšãããŠããŸãã
- 次å åæž: PCAã®ãããªæè¡ãé©çšã§ããŸãã
- ããŒã¿æ¡åŒµ: æšæž¬ãããã€ã³ã¿ã©ã¯ã·ã§ã³ãæ éã«è¿œå ããããç¥èã°ã©ãåã蟌ã¿ã䜿çšãããããŸãã
3. ã¹ã±ãŒã©ããªãã£
ã°ããŒãã«ãã©ãããã©ãŒã ã¯ãäœçŸäžãã®ãŠãŒã¶ãŒãšã¢ã€ãã ãæ±ããèšå€§ãªããŒã¿ã»ããã«ã€ãªãããŸããã¢ã«ãŽãªãºã ã¯ããªã¢ã«ã¿ã€ã ã§ã¬ã³ã¡ã³ããŒã·ã§ã³ãæäŸããããã«èšç®å¹çãé«ãå¿ èŠããããŸãã
解決ç:
- ã¢ã€ãã ããŒã¹å調ãã£ã«ã¿ãªã³ã°: ã¢ã€ãã ã»ãããããå®å®ããŠããããããŠãŒã¶ãŒããŒã¹ãããã¹ã±ãŒãªã³ã°ã容æãªããšãå€ãã§ãã
- è¿äŒŒè¿åæ¢çŽ¢ïŒANNïŒ:
AnnoyãFaissã®ãããªã©ã€ãã©ãªã¯ãé¡äŒŒåºŠæ€çŽ¢ãé«éåã§ããŸãã - 忣ã³ã³ãã¥ãŒãã£ã³ã°: Apache Sparkã®ãããªãã¬ãŒã ã¯ãŒã¯ã¯ãå€§èŠæš¡ãªããŒã¿åŠçãšã¢ãã«ãã¬ãŒãã³ã°ã«äœ¿çšã§ããŸãã
4. æåçãªãã¥ã¢ã³ã¹ãšå€æ§æ§
ããåœã§äººæ°ããããã®ãè¯ãã¬ã³ã¡ã³ããŒã·ã§ã³ãšããããã®ããå¥ã®åœã§ã¯ããã§ãªãå ŽåããããŸãã奜ã¿ã¯æåãèšèªãå°åã®ãã¬ã³ããããã«ã¯ç€ŸäŒçµæžçèŠå ã«ãã£ãŠåœ¢æãããŸãã
解決ç:
- å°ççã»ã°ã¡ã³ããŒã·ã§ã³: ãŠãŒã¶ãŒã®æåšå°ã«åºã¥ããŠåå¥ã®ã¢ãã«ãæ§ç¯ããããã¬ã³ã¡ã³ããŒã·ã§ã³ã®éã¿ã調æŽãããããããšãæ€èšããŸãã
- èšèªåŠç: ã³ã³ãã³ãããŒã¹ã®åŽé¢ã§ã¯ãå ç¢ãªå€èšèªNLPãäžå¯æ¬ ã§ãã
- ã³ã³ããã¹ãæ å ±: æéåž¯ãææ¥ãããã«ã¯çŸå°ã®ç¥æ¥ãªã©ã®èŠå ãçµã¿èŸŒã¿ãŸãã
- 倿§ãªãã¬ãŒãã³ã°ããŒã¿: ãã¬ãŒãã³ã°ããŒã¿ãã°ããŒãã«ãŠãŒã¶ãŒããŒã¹ã®å€æ§æ§ãåæ ããŠããããšã確èªããŸãã
5. ãã€ã¢ã¹ãšå ¬å¹³æ§
ã¬ã³ã¡ã³ããŒã·ã§ã³ã·ã¹ãã ã¯ãããŒã¿ã«ååšããæ¢åã®ãã€ã¢ã¹ãæå³ããã«æ°žç¶ãããå¯èœæ§ããããŸããäŸãã°ãããç¹å®ã®é³æ¥œãžã£ã³ã«ãæ¯é çãªãŠãŒã¶ãŒã°ã«ãŒãã®éã§å§åçã«äººæ°ãããå Žåããããéå°ã«æšå¥šãããããå°ãã倿§ãªã³ãã¥ããã£ã«æãããããããªãžã£ã³ã«ãã¢ãŒãã£ã¹ããçå€ãããå¯èœæ§ããããŸãã
解決ç:
- å ¬å¹³æ§ææš: ç°ãªããŠãŒã¶ãŒã°ã«ãŒãããã³ã¢ã€ãã ã«ããŽãªéã§ã®ã¬ã³ã¡ã³ããŒã·ã§ã³ã®å ¬å¹³æ§ãè©äŸ¡ããããã®ææšãéçºããç£èŠããŸãã
- åã©ã³ãã³ã°ã¢ã«ãŽãªãºã : æçµçãªã¬ã³ã¡ã³ããŒã·ã§ã³ãªã¹ãã«ããã倿§æ§ãšå ¬å¹³æ§ã確ä¿ããããã«ãåŸåŠçã¹ããããå®è£ ããŸãã
- ããã€ã¢ã¹æè¡: ã¢ãã«ãã¬ãŒãã³ã°äžã®ãã€ã¢ã¹ã軜æžããããã®ææ³ãæ¢æ±ããŸãã
åºæ¬çãªå調ãã£ã«ã¿ãªã³ã°ãè¶ ããŠïŒé«åºŠãªæè¡
åºæ¬çãªãŠãŒã¶ãŒããŒã¹ããã³ã¢ã€ãã ããŒã¹å調ãã£ã«ã¿ãªã³ã°ã¯åºç€çã§ãããããé«åºŠãªæè¡ã¯ç²ŸåºŠãšã¹ã±ãŒã©ããªãã£ãåäžãããŸãã
1. ãã€ããªããã¬ã³ã¡ã³ããŒã·ã§ã³ã·ã¹ãã
åè¿°ã®éããå調ãã£ã«ã¿ãªã³ã°ãã³ã³ãã³ãããŒã¹ãã£ã«ã¿ãªã³ã°ãç¥èããŒã¹ã·ã¹ãã ã®ãããªä»ã®ã¢ãããŒããšçµã¿åãããããšã§ãåã ã®éçãå æã§ããŸããäŸãã°ã
- ã³ã³ãã³ãããŒã¹ãå調ãã£ã«ã¿ãªã³ã°: ã³ã³ãã³ãç¹åŸŽéã䜿çšããŠãé¡äŒŒåºŠèšç®ãæ¹åããããã³ãŒã«ãã¹ã¿ãŒãåé¡ã«å¯ŸåŠãããããŸãã
- ã¢ã³ãµã³ãã«ã¡ãœãã: è€æ°ã®ã¬ã³ã¡ã³ããŒã¢ãã«ããã®äºæž¬ãçµã¿åãããŸãã
2. ã¬ã³ã¡ã³ããŒã·ã§ã³ã®ããã®æ·±å±€åŠç¿
ãã¥ãŒã©ã«ãããã¯ãŒã¯ãªã©ã®æ·±å±€åŠç¿ã¢ãã«ã¯ãã¬ã³ã¡ã³ããŒã·ã§ã³ã·ã¹ãã ã«ãããŠå€§ããªå¯èœæ§ã瀺ããŠããŸãããããã¯ããŒã¿å ã®è€éãªéç·åœ¢é¢ä¿ãæããããšãã§ããŸãã
- ãã¥ãŒã©ã«å調ãã£ã«ã¿ãªã³ã°ïŒNCFïŒ: åŸæ¥ã®è¡ååè§£ããã¥ãŒã©ã«ãããã¯ãŒã¯ã«çœ®ãæããŸãã
- ç³ã¿èŸŒã¿ãã¥ãŒã©ã«ãããã¯ãŒã¯ïŒCNNïŒãšååž°åãã¥ãŒã©ã«ãããã¯ãŒã¯ïŒRNNïŒ: ãŠãŒã¶ãŒã®é£ç¶çãªè¡åãã¢ãã«åããããã¢ã€ãã ã³ã³ãã³ãïŒäŸïŒããã¹ãèšè¿°ãç»åïŒãåŠçãããããããã«äœ¿çšã§ããŸãã
- ã°ã©ããã¥ãŒã©ã«ãããã¯ãŒã¯ïŒGNNïŒ: ãŠãŒã¶ãŒãšã¢ã€ãã ãã°ã©ãå ã®ããŒããšããŠè¡šçŸããã°ã©ãæ§é ãéããŠæ å ±ãäŒæããããšã§åã蟌ã¿ãåŠç¿ããŸãã
ãããã®ã¢ãã«ã¯ããã倧ããªããŒã¿ã»ãããšããå€ãã®èšç®ãªãœãŒã¹ãå¿ èŠãšããããšããããããŸãããæå 端ã®çµæãçã¿åºãããšãã§ããŸãã
3. ã³ã³ããã¹ãèªèåã¬ã³ã¡ã³ããŒã·ã§ã³ã·ã¹ãã ïŒCARSïŒ
ãŠãŒã¶ãŒã®å¥œã¿ã¯ãæé垯ãå ŽæãçŸåšã®æŽ»åãªã©ã®ã³ã³ããã¹ãã«åºã¥ããŠå€åããå¯èœæ§ããããŸããCARSã¯ããã®ã³ã³ããã¹ãæ å ±ãã¬ã³ã¡ã³ããŒã·ã§ã³ããã»ã¹ã«çµã¿èŸŒãããšãç®æããŠããŸãã
äŸ: ãŠãŒã¶ãŒã¯é±æ«ã®å€ã«ã¯ã¢ã¯ã·ã§ã³æ ç»ã奜ããããããŸããããå¹³æ¥ã®ååŸã«ã¯ããã³ããã¯ã³ã¡ãã£ã奜ããããããŸãããCARSã¯ããã«å¿ããŠã¬ã³ã¡ã³ããŒã·ã§ã³ã調æŽããŸãã
å«ççèæ ®äºé ãšéææ§
ã¬ã³ã¡ã³ããŒã·ã§ã³ã·ã¹ãã ãããæ®åããã«ã€ããŠãå«ççèæ ®ãæãéèŠã«ãªããŸãã
- éææ§: ãŠãŒã¶ãŒã¯ããªãç¹å®ã®ã¬ã³ã¡ã³ããŒã·ã§ã³ãè¡ãããã®ããçæ³çã«ã¯çè§£ãã¹ãã§ããããã¯ããXãèŠèŽãããããããYãæ°ã«å ¥ã£ããŠãŒã¶ãŒãZãæ°ã«å ¥ã£ãŠããŸãããšãã£ãæ©èœãéããŠå®çŸã§ããŸãã
- ãŠãŒã¶ãŒã³ã³ãããŒã«: ãŠãŒã¶ãŒãæç€ºçã«ãã£ãŒãããã¯ãæäŸãããã奜ã¿ã調æŽããããã¬ã³ã¡ã³ããŒã·ã§ã³ãåŽäžãããã§ããããã«ããããšã§ããŠãŒã¶ãŒãæ¯æŽããŸãã
- ãã©ã€ãã·ãŒ: ãŠãŒã¶ãŒããŒã¿ã責任ãæã£ãŠãã°ããŒãã«ãªãã©ã€ãã·ãŒèŠå¶ïŒäŸïŒGDPRïŒã«æºæ ããŠæ±ãããããšã確èªããŸãã
çµè«
å調ãã£ã«ã¿ãªã³ã°ã¯ãæŽç·Žãããã¬ã³ã¡ã³ããŒã·ã§ã³ã·ã¹ãã ãæ§ç¯ããããã®åŒ·åã§æ±çšæ§ã®é«ãæè¡ã§ãããŠãŒã¶ãŒã®éåçç¥èœã掻çšããããšã§ã奜ã¿ââã广çã«äºæž¬ããã°ããŒãã«ãªç¯å²ã§ãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãåäžãããããšãã§ããŸãã
Pythonã¯ãPandasãSciPyãSurpriseã®ãããªå°çšããŒã«ãšãã£ãè±å¯ãªã©ã€ãã©ãªãšã³ã·ã¹ãã ãåããŠããããããã®ã¢ã«ãŽãªãºã ãå®è£ ããããã®åªãããã©ãããã©ãŒã ãæäŸããŸããã³ãŒã«ãã¹ã¿ãŒãåé¡ãããŒã¿ã¹ããŒã¹ãã¹ãã¹ã±ãŒã©ããªãã£ãªã©ã®èª²é¡ã¯ååšããŸãããè¡ååè§£ããã€ããªããã¢ãããŒããæ·±å±€åŠç¿ã®ãããªé«åºŠãªæè¡ãéããŠå¯ŸåŠã§ããŸããæ±ºå®çã«éèŠãªã®ã¯ãã°ããŒãã«ãªãªãŒãã£ãšã³ã¹ã«ãšã£ãŠãæåçãªãã¥ã¢ã³ã¹ãèæ ®ããå ¬å¹³æ§ã確ä¿ããéææ§ãç¶æããããšã§ãã
ã¬ã³ã¡ã³ããŒã·ã§ã³ã·ã¹ãã ã®æ§ç¯ã«çæããéã¯ã次ã®ç¹ãå¿ããªãã§ãã ããã
- ããŒã¿ãçè§£ãã: ãŠãŒã¶ãŒãšã¢ã€ãã ã®ã€ã³ã¿ã©ã¯ã·ã§ã³ããŒã¿ã培åºçã«ã¯ãªãŒã³ã¢ããããååŠçããæ¢çŽ¢ããŸãã
- é©åãªã¢ã«ãŽãªãºã ãéžæãã: ç°ãªãå調ãã£ã«ã¿ãªã³ã°æè¡ïŒãŠãŒã¶ãŒããŒã¹ãã¢ã€ãã ããŒã¹ãè¡ååè§£ïŒãšã©ã€ãã©ãªã詊ããŸãã
- å³å¯ã«è©äŸ¡ãã: ã¢ãã«ã®ããã©ãŒãã³ã¹ã枬å®ããããã«é©åãªææšã䜿çšããŸãã
- ååŸ©ãšæ¹å: ã¬ã³ã¡ã³ããŒã·ã§ã³ã·ã¹ãã ã¯éçã§ã¯ãããŸãããç¶ç¶çãªç£èŠãšæ¹åãéµã§ãã
- ã°ããŒãã«ãªå€æ§æ§ãåãå ¥ãã: äžçäžã®èšå€§ãªãŠãŒã¶ãŒã®å¥œã¿ã«å¯Ÿå¿ã§ãããããã·ã¹ãã ãå æ¬çãã€é©å¿æ§ã®ãããã®ãšããŠèšèšããŸãã
å調ãã£ã«ã¿ãªã³ã°ã®ååãšãã®Pythonå®è£ ãç¿åŸããããšã§ãããæ·±ããŠãŒã¶ãŒã€ã³ãµã€ããåŒãåºããã°ããŒãã«ãªãªãŒãã£ãšã³ã¹ã«çã«é¿ãã¬ã³ã¡ã³ããŒã·ã§ã³ã·ã¹ãã ãæ§ç¯ãããšã³ã²ãŒãžã¡ã³ããä¿é²ããããžãã¹ã®æåãéæããããšãã§ããŸãã